package com.gp.learn.common.core.mybaitsplus.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gp.learn.common.core.mybaitsplus.conditions.SuperQueryWrapper;
import com.gp.learn.common.core.mybaitsplus.mapper.SupperMapper;
import com.gp.learn.common.core.mybaitsplus.service.BaseService;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;


/**
 * （ 泛型：M 是 mapper 对象，T 是实体 ）
 *
 * @param <M>
 * @param <T>
 */
public abstract class BaseServiceImpl<M extends SupperMapper<T>, T> extends ServiceImpl<M, T> implements BaseService<T> {

    /**
     * 实体类型
     */
    private Class<T> entityClass;

    //获取泛型
    public BaseServiceImpl() {
        Type type = this.getClass().getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            Type[] p = ((ParameterizedType) type).getActualTypeArguments();
            entityClass = (Class<T>) p[1];
        }
    }

    /**
     * list查询
     *
     * @param qw
     * @return
     */
    @Override
    public List<Map<String, Object>> selectListMap(SuperQueryWrapper qw) {
        return baseMapper.selectListMap(qw);
    }

    /**
     * pageList分页查询
     *
     * @param qw
     * @return
     */
    @Override
    public IPage pageList(Page page, SuperQueryWrapper qw) {
        return baseMapper.pageList(page, qw);
    }

}
